package com.health.config;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

public class FtpUtil {

    //ftp服务器ip地址
    private static final String FTP_ADDRESS = "192.168.1.20";
    //端口号
    private static final int FTP_PORT = 21;
    //用户名
    private static final String FTP_USERNAME = "user-file";
    //密码
    private static final String FTP_PASSWORD = "123";
    //文件路径
    private static final String FTP_BASEPATH = "/home/user-file/files";

    /**
     * 上传文件到FTP服务器
     * @param multipartFile 文件对象
     * @return 最终保存的文件名
     * @throws IOException
     */
    public static String uploadFile(MultipartFile multipartFile) throws IOException {
        //文件名处理
        String filename = multipartFile.getOriginalFilename(); //原文件名
        String suffix = filename.substring(filename.lastIndexOf(".")); //原文件后缀
        String newName = UUID.randomUUID()+suffix;//最终文件名

        //获取文件输入流
        InputStream inputStream = multipartFile.getInputStream();

        FTPClient ftp = new FTPClient();
        try {
            ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
            ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
            int reply = ftp.getReplyCode(); //获取状态码
            //如果reply返回230就算成功了，如果返回530密码用户名错误或当前用户无权限
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect(); //断开连接
                return null;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(FTP_BASEPATH);
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            ftp.enterLocalPassiveMode();//被动模式：让服务端开放端口给客户端上传文件
            ftp.storeFile(newName,inputStream); //存储文件
            ftp.logout();//注销登录状态
        } finally {
            //释放资源
            inputStream.close();
            ftp.disconnect();
        }
        return newName;
    }
}